/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package wasolicitudesfiec.logicacontrol.SolicitarAperturaPostgrado;

import entidad.apertura.Solicitudaperturapostgrado;
import hero.interfaces.BnNodeValue;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.AperturaPostgrado.VolveraSolicitar;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import web.util.Constantes;

/**
 *
 * @author kabad
 */
public class CTRL_VolveraSolicitar  extends CTRL_Base {
    private VolveraSolicitar gui;
    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarAperturaPostgrado;
    private final String nombreActividad = Constantes.SolicitarAperturaPostgrado.volveraSolicitar;

    public CTRL_VolveraSolicitar(VolveraSolicitar gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudaperturapostgrado solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogAperturaPostgrado().leerSolicitudAperturaNivel2(idSolicitud);
 gui.getMenu().setTitulo(this.nombreProceso + "_" +idSolicitud+ ": "+ nombreActividad);

            gui.getStResultado().setText("Su solicitud ha sido observada y devuelta por el Decano de la Facultad.");
            gui.getLblInformacion().setText("Datos de la solicitud:");
            gui.getDetalleSolicitarApertura().getLblSolicitante().setText(solicitud.getProfesor().getPersona().toString());
            gui.getDetalleSolicitarApertura().getLblTipo().setText(solicitud.getTipo());
            gui.getDetalleSolicitarApertura().getTxtaTema().setValue(solicitud.getTema());
            if (solicitud.getObservacionProfesor() != null) {
                gui.getDetalleSolicitarApertura().getTxtaComentarios().setValue(solicitud.getObservacionProfesor());
            } else {
                gui.getDetalleSolicitarApertura().getTxtaComentarios().setValue(Constantes.Mensajes.noComentarios);
            }
            if (solicitud.getPathArchivoAdjunto() != null) {
                gui.getDetalleSolicitarApertura().getLinkArchivo().setRendered(true);
                gui.getDetalleSolicitarApertura().getStNoArchivo().setRendered(false);
                gui.getDetalleSolicitarApertura().getLinkArchivo().setUrl(Constantes.Rutas.rutaArchivos + solicitud.getPathArchivoAdjunto().replaceAll(" ", "%20"));
                gui.getDetalleSolicitarApertura().getLinkArchivo().setText(solicitud.getNombreArchivo());
            } else {
                gui.getDetalleSolicitarApertura().getLinkArchivo().setRendered(false);
                gui.getDetalleSolicitarApertura().getStNoArchivo().setRendered(true);
            }

            if (solicitud.getFkIdEvaluador1() != 0) {
                gui.getLblEvaluadorInforme1().setText("El informe del evaluador " + solicitud.getEvaluador1().getPersona().toString() + " es: ");
                gui.getLblInforme1().setText(solicitud.getInforme1());
                gui.getTxtaObservacionesEvaluador1().setValue(solicitud.getObservacionEvaluador1());
                gui.getPanelemitirInformeEvaluador1().setRendered(true);

            } else {
                gui.getPanelemitirInformeEvaluador1().setRendered(false);
            }
            if (solicitud.getFkIdEvaluador2() != 0) {
                gui.getLblEvaluadorInforme2().setText("El informe del evaluador " + solicitud.getEvaluador2().getPersona().toString() + " es: ");
                gui.getLblInforme2().setText(solicitud.getInforme2());
                gui.getTxtaObservacionesEvaluador2().setValue(solicitud.getObservacionEvaluador2());
                gui.getPanelemitirInformeEvaluador2().setRendered(true);
            } else {
                gui.getPanelemitirInformeEvaluador2().setRendered(false);
            }
            if (solicitud.getFkIdEvaluador3() != 0) {
                gui.getLblEvaluadorInforme3().setText("El informe del evaluador " + solicitud.getEvaluador3().getPersona().toString() + " es: ");
                gui.getLblInforme3().setText(solicitud.getInforme3());
                gui.getTxtaObservacionesEvaluador3().setValue(solicitud.getObservacionEvaluador3());
                gui.getPanelemitirInformeEvaluador3().setRendered(true);
            } else {
                gui.getPanelemitirInformeEvaluador3().setRendered(false);
            }
             if (solicitud.getObservacionDecano() != null) {
                gui.getTxtComentarioDecano().setValue(solicitud.getObservacionDecano());
            } else {
                gui.getTxtComentarioDecano().setValue(Constantes.Mensajes.noComentarios);
            }
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            Logger.getLogger(CTRL_VolveraSolicitar.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }


     public boolean finalizar() throws MensajeException {
        realizarActividad(Constantes.Atributo.DecisionVolverASolicitar.Finalizar.toString());
        return true;
    }
     public boolean volverASolicitar() throws MensajeException {
        realizarActividad(Constantes.Atributo.DecisionVolverASolicitar.Reiniciar.toString());
        return true;
    }
    private void realizarActividad(String decision) throws MensajeException {
        String nombreInstancia;
        BnNodeValue actividad;
        Solicitudaperturapostgrado solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogAperturaPostgrado().leerSolicitudApertura(idSolicitud);

            if(decision.equals(Constantes.Atributo.DecisionVolverASolicitar.Finalizar.toString())){
                solicitud.setEstado(Constantes.EstadoSolicitud.Terminada.toString());
            }
            solicitud = logica.getLogAperturaPostgrado().guardarYClonarSolicitudApertura(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.decisionVolverASolicitar, decision);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudApertura() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_RevisarInformes.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }
}
